// node 作为业务点
const fs = require('fs');
// Promise 解决回调地狱的一个容器，把异步问题封装成Promise
const readmePromise = new Promise((resolve, reject) => {
    fs.readFile('./readme.md', function(err, data) {
        if (err) {
            reject(err)
        } else {
            resolve(data.toString())
        }
    })
})

const htmlPromise = new Promise((resolve, reject) => {
    fs.readFile('./index.html', function(err, data) {
        if (err) {
            reject(err)
        } else {
            resolve(data.toString())
        }
    })
})

const packagePromise = new Promise((resolve, reject) => {
    fs.readFile('./package.json', function(err, data) {
        if (err) {
            reject(err)
        } else {
            resolve(data.toString())
        }
    })
});

// readmePromise
//     .then((data) => {
//         console.log(data);  // readme 的数据
//         return htmlPromise
//     })
//     .then((data) => {
//         console.log(data);  // html 数据
//         return packagePromise
//     })
//     .then((data) => {
//         console.log(data);  // package 数据
//     })

// fs.readFile('readme.md', function(error, data) {
//     if (error) {
//         console.log(error);
//     } else {
//         console.log(data.toString());
//     }
// })

// 优雅一点
(async() => {
    let readme = await readmePromise;
    console.log(readme);
    let html = await htmlPromise;
    console.log(html);
    let package = await packagePromise;
    console.log(package);
})()

// fs.readFile('index.html', function(error, data) {
//     if (error) {
//         console.log(error);
//     } else {
//         console.log(data.toString());
//     }
// })

// 1. 回调
// fs.readFile('index.html', 'utf-8', function(err, data){
//     if(err){
//         console.log(err);
//     }else{
//         console.log(data);
//         fs.readFile('package.json', 'utf-8', function(err, data){
//             if(err){
//                 console.log(err);
//             }else{
//                 console.log(data);
//                 fs.readFile('readme.md', 'utf-8', function(err, data){
//                     if(err){
//                         console.log(err);
//                     }else{
//                         console.log(data);
//                     }
//                 })
//             }
//         })
//     }
// })

// 异步变同步的写法
// 回调函数的缺点  箭头式的，一层一层 回调地狱，代码可读性成为灾难